<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>let-const重复声明变量</title>
  <!-- 
  在JavaScript中， let  和  const  是 ES6 引入的用于声明变量的关键字。它们在变量的作用域和重复声明方面有一些重要的区别。
  1.  let  的重复声明

  - 不允许重复声明：在同一作用域内，使用  let  声明的变量不能重复声明。如果尝试重复声明同一个变量，会抛出一个错误。

  示例：
  let x = 10;
  // let x = 20; // 报错: Identifier 'x' has already been declared
  2.  const  的重复声明

  - 不允许重复声明：与  let  相似，在同一作用域内，使用  const  声明的变量也不能重复声明。如果尝试重复声明同一个变量，同样会抛出一个错误。

  示例：
  const y = 30;
  // const y = 40; // 报错: Identifier 'y' has already been declared
  3. 块级作用域的影响
  -  let  和  const  都具有块级作用域，这意味着它们的声明只在最近的代码块内有效。因此，在不同的块中可以重复声明同名变量。
  {
      let x = 10;
      console.log(x); // 输出: 10
  }

  {
      let x = 20; // 不同块中的 x
      console.log(x); // 输出: 20
  }

  // 不同块中的 const
  {
      const z = 30;
      console.log(z); // 输出: 30
  }

  {
      const z = 40; // 不同块中的 z
      console.log(z); // 输出: 40
  }
  4. 总结
  - 重复声明：在同一作用域内，使用  let  和  const  声明的变量都不允许重复声明，会抛出错误。
  - 块级作用域：由于  let  和  const  具有块级作用域，因此在不同的代码块中可以重复声明同名变量，而不会产生冲突。
  - 最佳实践：在实际开发中，建议使用  const  声明不可变的变量，使用  let  声明可变的变量，避免不必要的重复声明，以提高代码的可读性和维护性。
  -->
</head>
<body>

  <script>

    // 1. var变量可以重复声明
    var a = 1;
    var a = 2;
    console.log(a); // 输出: 2

    // 2. let变量不可以重复声明
    let b = 3;
    // let b = 4; // 报错: Identifier 'b' has already been declared
    console.log(b); // 输出: 3

    // 3. const变量不可以重复声明
    const c = 5;
    // const c = 6; // 报错: Identifier 'c' has already been declared
    console.log(c); // 输出: 5

  </script>
  
</body>
</html>